package com.xjh.basestudy.designmode.structureMode.structureMode2_Composite;

import com.alibaba.fastjson.JSON;

/**
 * @Author XuJianHua
 * @Date 2022/9/25 0:06
 * @Description
 */
public class Client {
    public static void main(String[] args) {
        Node driveD = new Folder("D盘");

        Node doc = new Folder("文档");
        doc.add(new File("简历.doc"));
        doc.add(new File("项目介绍.ppt"));

        driveD.add(doc);

        Node music = new Folder("音乐");

        Node jay = new Folder("周杰伦");
        jay.add(new File("双截棍.mp3"));
        jay.add(new File("告白气球.mp3"));
        jay.add(new File("听妈妈的话.mp3"));

        Node jack = new Folder("张学友");
        jack.add(new File("吻别.mp3"));
        jack.add(new File("一千个伤心的理由.mp3"));

        music.add(jay);
        music.add(jack);

        driveD.add(music);
        // 输出树形列表
        driveD.tree(0);
        // 遍历原理
        // 1.调用文件夹类的tree方法，文件夹类会调用Node类的tree方法
        // 2.Node类tree方法做了什么：第一件：根据space参数打空格，第二件：输出该节点名称并换行
        // 3.文件夹类tree方法space+1(子节点相对于父节点加一个空格),循环节点list，每个节点又去调用Node的tree，输出自己名称
        // 问题：最后没有子节点时，为什么没有报错呢？因为已经默认了是个空list，不会为null，所以遍历不会报错，只会不执行而已。
        // （文件夹类第一行调用父类通用的tree方法列出自己的名字super.tree(space);）



    }
}
